package com.fau.cm.service;

import java.io.File;
import java.io.IOException;
import java.util.List;
import java.util.Map;

import org.apache.poi.ss.usermodel.Workbook;

import com.fau.cm.action.index.MedicalAlternately;
import com.fau.cm.entity.MedicalAdmin;
import com.fau.cm.entity.MedicalCall;
import com.fau.cm.entity.MedicalCallEnd;
import com.fau.cm.entity.MedicalCallPending;
import com.fau.cm.entity.MedicalCallTerminate;
import com.fau.cm.entity.MedicalCallUntreated;
import com.fau.cm.entity.MedicalGroup;
import com.fau.cm.entity.MedicalPlatform;
import com.fau.cm.util.Page;

/**
 * @desc 话务任务管理接口
 * @author kangyj
 * @datetime 2014年10月25日,下午4:20:44
 */
public interface ICallManagerService {
	
	/**
	 * @desc 分页查询未分配话务任务
	 * @param call 话务任务表
	 * @param admin 当前登录用户
	 * @param map 分页参数
	 * @return
	 * @author kangyj
	 * @datetime 2014年10月14日,下午8:24:03
	 */
	public Page findCallByPage(MedicalCall call, MedicalAdmin admin, Map<String, Object> map);
	
	/**
	 * @desc 分页查询未处理话务任务
	 * @param callUntreated 未处理话务任务
	 * @param admin 当前登录用户
	 * @param map 分页参数
	 * @return
	 * @author kangyj
	 * @datetime 2014年10月26日,下午5:55:20
	 */
	public Page findCallUntreatedByPage(MedicalCallUntreated callUntreated, MedicalAdmin admin, Map<String, Object> map);
	
	/**
	 * @desc 分页查询待处理话务任务
	 * @param callPending 待处理话务任务
	 * @param admin 当前登录用户
	 * @param map 分页参数
	 * @return
	 * @author kangyj
	 * @datetime 2014年10月26日,下午5:58:19
	 */
	public Page findCallPendingByPage(MedicalCallPending callPending, MedicalAdmin admin, Map<String, Object> map);
	
	/**
	 * @desc 分页查询已转移话务任务
	 * @param callTransfer 已转移话务任务
	 * @param admin 当前登录用户
	 * @param map 分页参数
	 * @return
	 * @author kangyj
	 * @datetime 2014年10月26日,下午5:59:11
	 */
	public Page findCallTransferByPage(MedicalCallUntreated callUntreated, MedicalAdmin admin, Map<String, Object> map);
	
	/**
	 * @desc 分页查询已结束话务任务
	 * @param callEnd 已结束话务任务
	 * @param admin 当前登录用户
	 * @param map 分页参数
	 * @return
	 * @author kangyj
	 * @datetime 2014年10月26日,下午5:59:56
	 */
	public Page findCallEndByPage(MedicalCallEnd callEnd, MedicalAdmin admin, Map<String, Object> map);
	
	/**
	 * @desc 分页查询已终止话务任务
	 * @param callEnd 已结束话务任务
	 * @param admin 当前登录用户
	 * @param map 分页参数
	 * @return
	 * @author kangyj
	 * @datetime 2014年10月26日,下午5:59:56
	 */
	public Page findCallTerminateByPage(MedicalCallTerminate callTerminate, MedicalAdmin admin, Map<String, Object> map);
	
	/**
	 * @desc 话务分配--未分配任务直接分配到话务员
	 * @param callsId 话务任务id
	 * @param usersId 话务员id
	 * @author kangyj
	 * @datetime 2014年10月15日,下午4:56:36
	 */
	public boolean callAllocate(String callsId, String usersId);
	
	/**
	 * @desc 话务分配--未分配批量分配到中心
	 * @param callsId 待分配话务任务id
	 * @param centersId 中心id
	 * @author kangyj
	 * @datetime 2014年10月18日,下午4:02:29
	 */
	public boolean callAllocateCenter(String callsId, String centersId);
	
	/**
	 * @desc 话务分配，未分配--批量分配到组
	 * @param callsId 待分配话务任务id
	 * @param groupsId 组id
	 * @author kangyj
	 * @datetime 2014年10月18日,下午4:03:47
	 */
	public boolean callAllocateGroup(String callsId, String groupsId);
	
	/**
	 * @desc 批量删除--未分配话务任务
	 * @param call 待删除话务任务
	 * @author kangyj
	 * @datetime 2014年10月19日,下午6:37:57
	 */
	public void delCall(MedicalCall call);
	
	/**
	 * @desc 批量删除--未处理话务任务
	 * @param callUntreated 待删除话务任务
	 * @author kangyj
	 * @datetime 2014年10月19日,下午6:37:57
	 */
	public void delUntreatedCall(MedicalCallUntreated callUntreated);
	
	/**
	 * @desc 批量删除--待处理话务任务
	 * @param callPending 待删除话务任务
	 * @author kangyj
	 * @datetime 2014年10月19日,下午6:37:57
	 */
	public void delPendingCall(MedicalCallPending callPending);
	
	/**
	 * @desc 批量删除--已结束话务任务
	 * @param callEnd 待删除话务任务
	 * @author kangyj
	 * @datetime 2014年10月19日,下午6:37:57
	 */
	public void delEndCall(MedicalCallEnd callEnd);
	
	/**
	 * @desc 批量删除--已终止话务任务
	 * @param callTerminate 待删除已终止任务
	 * @author kangyj
	 * @datetime 2014年10月19日,下午6:37:57
	 */
	public void delTerminateCall(MedicalCallTerminate callTerminate);
	
	public boolean validPhoneNum(MedicalAdmin admin, String phoneNum);
	
	/**
	 * @desc 保存话务任务
	 * @param call 话务任务
	 * @param admin 当前登录用户
	 * @return
	 * @author kangyj
	 * @datetime 2014年10月21日,下午9:55:33
	 */
	public boolean saveCall(MedicalCall call, MedicalAdmin admin);
	
	/**
	 * @desc 批量导入话务管理
	 * @param admin
	 * @param file
	 * @throws IOException
	 * @author kangyj
	 * @datetime 2014年10月22日,下午6:01:51
	 */
	public void importSave(MedicalAdmin admin, File file) throws Exception;
	
	/**
	 * @desc 查询所有中心
	 * @param admin 当前登录用户
	 * @return
	 * @author kangyj
	 * @datetime 2014年10月22日,下午6:11:52
	 */
	public List<MedicalPlatform> findPlatformList(MedicalAdmin admin);
	
	/**
	 * @desc 查询中心下组的集合
	 * @param platformId 中心id
	 * @return
	 * @author kangyj
	 * @datetime 2014年10月27日,下午2:06:35
	 */
	public List<MedicalGroup> findGroupList(String platformId);
	
	/**
	 * @desc 查询组下话务员集合
	 * @param groupId 组id
	 * @return
	 * @author kangyj
	 * @datetime 2014年10月28日,上午9:51:30
	 */
	public List<MedicalAdmin> findUserList(String groupId);
	
	/**
	 * @desc 批量修改话务任务类别--未分配任务
	 * @param callIds
	 * @param categoryKey
	 * @author kangyj
	 * @datetime 2014年10月23日,下午2:24:41
	 */
	public void editCallCategory(String callIds, String categoryKey);
	/**
	 * @desc 批量修改话务任务类别--未处理任务
	 * @param callIds
	 * @param categoryKey
	 * @author kangyj
	 * @datetime 2014年10月23日,下午2:24:41
	 */
	public void editCallUntreatedCategory(String callIds, String categoryKey);
	/**
	 * @desc 批量修改话务任务类别--待处理任务
	 * @param callIds
	 * @param categoryKey
	 * @author kangyj
	 * @datetime 2014年10月23日,下午2:24:41
	 */
	public void editCallPendingCategory(String callIds, String categoryKey);
	
	/**
	 * @desc 批量修改话务任务类别--已结束任务
	 * @param callIds
	 * @param categoryKey
	 * @author kangyj
	 * @datetime 2014年10月23日,下午2:24:41
	 */
	public void editCallEndCategory(String callIds, String categoryKey);
	
	/**
	 * @desc 批量修改话务任务类别--已终止任务
	 * @param callIds
	 * @param categoryKey
	 * @author kangyj
	 * @datetime 2014年10月23日,下午2:24:41
	 */
	public void editCallTerminateCategory(String callIds, String categoryKey);
	
	/**
	 * @desc 话务分配--未分配任务修改状态
	 * @param callIds 待修改状态任务id
	 * @param statusKey 将要修改为的状态值
	 * @return
	 * @author kangyj
	 * @datetime 2014年10月25日,下午11:06:41
	 */
	public void editCallStatus(String callIds, String statusKey);
	
	/**
	 * @desc 话务分配--未处理任务修改状态
	 * @param callIds 待修改状态任务id
	 * @param statusKey 将要修改为的状态值
	 * @return
	 * @author kangyj
	 * @datetime 2014年10月25日,下午11:30:46
	 */
	public void editCallUntreatedSta(String callIds, String statusKey);
	
	/**
	 * @desc 话务分配--待处理任务修改状态
	 * @param callIds 待修改状态任务id
	 * @param statusKey 将要修改为的状态值
	 * @return
	 * @author kangyj
	 * @datetime 2014年10月25日,下午11:30:46
	 */
	public void editCallPendingSta(String callIds, String statusKey);
	
	/**
	 * @desc 话务分配--已转移任务修改状态
	 * @param callIds 待修改状态任务id
	 * @param statusKey 将要修改为的状态值
	 * @return
	 * @author kangyj
	 * @datetime 2014年10月25日,下午11:30:46
	 */
	public void editCallTransferSta(String callIds, String statusKey);
	
	/**
	 * @desc 话务分配--已结束任务修改状态
	 * @param callIds 待修改状态任务id
	 * @param statusKey 将要修改为的状态值
	 * @return
	 * @author kangyj
	 * @datetime 2014年10月25日,下午11:30:46
	 */
	public void editCallEndSta(String callIds, String statusKey);
	
	/**
	 * @desc 话务分配--已终止任务修改状态
	 * @param callIds 待修改状态任务id
	 * @param statusKey 将要修改为的状态值
	 * @return
	 * @author kangyj
	 * @datetime 2014年10月25日,下午11:30:46
	 */
	public void editCallTerminateSta(String callIds, String statusKey);
	
	
/*--------------------------------话务任务管理方法-----------------------------------------------*/	
	
	/**
	 * @desc 回收未分配任务
	 * @param callId 待回收话务id
	 * @author kangyj
	 * @datetime 2014年10月29日,下午5:41:08
	 */
	public void recoverUnaCall(String callsId);
	
	/**
	 * @desc 回收未处理任务
	 * @param callId 待回收话务id
	 * @author kangyj
	 * @datetime 2014年10月29日,下午6:32:42
	 */
	public void recoverUntCall(String callsId);
	
	/**
	 * @desc 回收待处理
	 * @param callId 待回收话务id
	 * @author kangyj
	 * @datetime 2014年10月29日,下午6:32:55
	 */
	public void recoverPenCall(String callsId);
	
	/**
	 * @desc 回收已结束任务
	 * @param callId 待回收话务id
	 * @author kangyj
	 * @datetime 2014年10月29日,下午6:33:35
	 */
	public void recoverEndCall(String callsId);
	
	/**
	 * @desc 导出未分配话务任务
	 * @return Workbook
	 * @throws IOException
	 * @author liy
	 * @datetime 2014年10月31日,上午11:13:30
	 */
	public Workbook exportUna(MedicalAdmin admin,MedicalCall call) throws Exception;
	
	/**
	 * @desc 导出未分配话务任务(当前页)
	 * @return Workbook
	 * @throws IOException
	 * @author liy
	 * @datetime 2014年10月31日,上午11:13:30
	 */
	public Workbook exportCurrentUna(String id) throws Exception;
	
	/**
	 * @desc 查找所有话务任务
	 * @param call
	 * @param map
	 * @return page
	 * @author dangjh
	 * 2015年2月7日 下午5:59:41
	 */
	public Page findAllCallByPage(MedicalCall call, Map<String, Object> map);
	
	/**
	 * @desc 查找所有中心话务任务
	 * @param call
	 * @param map
	 * @return page
	 * @author dangjh
	 * 2015年2月7日 下午5:59:41
	 */
	public Page findAllCenterCallByPage(MedicalCall call, Map<String, Object> map, MedicalAdmin admin);
	
	/**
	 * @desc 查找所有中心话务任务
	 * @param call
	 * @param map
	 * @return page
	 * @author dangjh
	 * 2015年2月7日 下午5:59:41
	 */
	public Page findAllGroupCallByPage(MedicalCallUntreated untreated, Map<String, Object> map, MedicalAdmin admin);
	
	/**
	 * @desc 导出所有-已分配
	 * @return Workbook
	 * @throws Exception 
	 * @author liy
	 * @datetime 2015年1月4日,下午4:29:27
	 */
	public Workbook callManageExportAll(MedicalAdmin admin,MedicalCall call) throws Exception;
	
	/**
	 * @desc 导出当前-已分配
	 * @return Workbook
	 * @throws Exception 
	 * @author liy
	 * @datetime 2015年1月4日,下午4:42:00
	 */
	public Workbook callManageExportCurrent(String id) throws Exception;
	
	/**
	 * @desc 导出当前-未处理
	 * @return Workbook
	 * @throws Exception 
	 * @author liy
	 * @datetime 2015年1月4日,下午5:04:12
	 */
	public Workbook callManageUntreatedExportCurrent(String id) throws Exception;
	
	/**
	 * @desc 导出所有-未处理
	 * @return Workbook
	 * @throws Exception 
	 * @author liy
	 * @datetime 2015年1月4日,下午5:06:07
	 */
	public Workbook callManageUntreatedExportAll(MedicalAdmin admin,MedicalCallUntreated call) throws Exception;
	
	/**
	 * @desc 导出所有-已转移
	 * @return Workbook
	 * @throws Exception 
	 * @author liy
	 * @datetime 2015年1月4日,下午7:04:13
	 */
	public Workbook callManageTransferExportAll(MedicalAdmin admin,MedicalCallUntreated call) throws Exception;
	
	/**
	 * @desc 导出所有-待处理
	 * @return Workbook
	 * @throws Exception 
	 * @author liy
	 * @datetime 2015年1月4日,下午5:39:46
	 */
	public Workbook callManagePendingExportAll(MedicalAdmin admin,MedicalCallPending call) throws Exception;
	
	/**
	 * @desc 导出当前-待处理
	 * @return Workbook
	 * @throws Exception 
	 * @author liy
	 * @datetime 2015年1月4日,下午5:40:40
	 */
	public Workbook callManagePendingExportCurrent(String id) throws Exception;
	
	/**
	 * @desc 导出当前-已结束
	 * @return Workbook
	 * @throws Exception 
	 * @author liy
	 * @datetime 2015年1月4日,下午7:19:30
	 */
	public Workbook callManageEndExportCurrent(String id) throws Exception;
	
	/**
	 * @desc 导出全部-已结束
	 * @return Workbook
	 * @throws Exception 
	 * @author liy
	 * @datetime 2015年1月4日,下午7:42:48
	 */
	public Workbook callManageEndExportAll(MedicalAdmin admin,MedicalCallEnd call) throws Exception;
	
	/**
	 * @desc 导出全部-已终止
	 * @return Workbook
	 * @throws Exception 
	 * @author liy
	 * @datetime 2015年1月4日,下午8:03:36
	 */
	public Workbook callManageTerminateExportAll(MedicalAdmin admin,MedicalCallTerminate call) throws Exception;
	
	/**
	 * @desc 导出当前-已终止
	 * @return Workbook
	 * @throws Exception 
	 * @author liy
	 * @datetime 2015年1月4日,下午8:04:55
	 */
	public Workbook callManageTerminateExportCurrent(String id) throws Exception;
	
	/**
	 * @desc 来电查询任务是否存在
	 * @param did 外线号码
	 * @param phoneNum 来电号码
	 * @return
	 * @author kangyj
	 * @datetime 2015年1月10日,下午7:01:41
	 */
	public List<Object> incomfindCall(String did, String phoneNum);
	
	/**
	 * @desc 呼入电话，保存任务及电话信息
	 * @param admin 当前登录用户
	 * @param alternately
	 * @return
	 * @author kangyj
	 * @datetime 2015年1月11日,下午6:13:01
	 */
	public String incomsaveCall(MedicalAdmin admin, MedicalAlternately alternately);
	
	/**
	 * @desc 呼入电话，任务存在，更新任务状态、次数
	 * @param list 参数集合（任务状态、id、类别、电话呼入次数）
	 * @param 对接临时对象
	 * @return
	 * @author kangyj
	 * @datetime 2015年1月12日,下午2:04:00
	 */
	public String incomUpdateCall(List<Object> list, MedicalAlternately alternately);
	
	/**
	 * @desc 保存来电信息（用于处理弹屏保存任务，扫表时不进行更新任务类别）
	 * @param phoneNum
	 * @param admin
	 * @author kangyj
	 * @datetime 2015年3月12日,下午7:59:30
	 */
	public void saveCallCaller(String phoneNum, MedicalAdmin admin);
	
	/**
	 * @desc 忙转更新任务处理者
	 * @param callId
	 * @param extension
	 * @author kangyj
	 * @datetime 2015年2月6日,下午5:00:18
	 */
	public void busyTurn(String callId, String extension);
	
	/**
	 * @desc 导出当前-所有话务任务
	 * @return Workbook
	 * @throws Exception 
	 * @author liy
	 * @datetime 2015年1月4日,下午8:04:55
	 */
	public Workbook callManageAllExportCurrent(String id) throws Exception;
	
	/**
	 * @desc 导出所有-所有话务任务
	 * @return Workbook
	 * @throws Exception 
	 * @author liy
	 * @datetime 2015年1月4日,下午8:04:55
	 */
	public Workbook callManageAllExport(MedicalCall call, MedicalAdmin admin) throws Exception;
	
	/**
	 * @desc 导出所有-所有话务任务(中心)
	 * @return Workbook
	 * @throws Exception 
	 * @author liy
	 * @datetime 2015年1月4日,下午8:04:55
	 */
	public Workbook callManageCenterExportAll(MedicalCall call, MedicalAdmin admin) throws Exception;
	
	/**
	 * @desc 导出所有-所有话务任务(组)
	 * @return Workbook
	 * @throws Exception 
	 * @author liy
	 * @datetime 2015年1月4日,下午8:04:55
	 */
	public Workbook callManageGroupExportAll(MedicalCallUntreated call, MedicalAdmin admin) throws Exception;
	
	/**
	 * @desc 下载导入任务模板
	 * @param admin
	 * @return
	 * @throws Exception Workbook
	 * @author kangyj
	 * @datetime 2015年4月3日,上午10:30:07
	 */
	public Workbook downloadCallTemp(MedicalAdmin admin) throws Exception;
	
}
